/**
 * 1. 创建一个仿制手机工厂
 * 2. 生产一个仿制手机-FakeApplePhone
 * 3. FakeApplePhone 的软件是 AppleSoftware，硬件是 AppleHardware
 *
 * 请使用抽象工厂模式实现
 */

// 抽象手机
class MobilePhoneFactory {
  software() {
    throw new Error('我只用于继承，不能调用')
  }
  hardware() {
    throw new Error('我只用于继承，不能调用')
  }
}
// 抽象软件
class Software {
  // function是功能的意思
  softwareFunc() {
    throw new Error('我只用于继承，不能调用')
  }
}
// 抽象硬件
class Hardware {
  // function是功能的意思
  hardwareFunc() {
    throw new Error('我只用于继承，不能调用')
  }
}
// 生产Fake Apple 软件
class AppleSoftware extends Software {
  softwareFunc() {
    console.log('IOS系统软件的作用')
  }
}
// 生产Fake Apple 硬件
class AppleHardware extends Hardware {
  hardwareFunc() {
    console.log('IOS系统硬件的作用')
  }
}
// 生产Fake Apple的手机
class FakeApplePhone extends MobilePhoneFactory {
  software() {
    return new AppleSoftware()
  }
  hardware() {
    return new AppleHardware()
  }
}

const myPhone = new FakeApplePhone()
const myPhoneSoftware = myPhone.software()
const myPhoneHardware = myPhone.hardware()
console.log(myPhoneSoftware, myPhoneHardware)
myPhoneSoftware.softwareFunc()
myPhoneHardware.hardwareFunc()
